home *** CD-ROM | disk | FTP | other *** search
- #include <WM.h>
- #include <MyStructs.h>
- #include <Border.h>
-
- extern SHORT gwidth,gheight;
- extern ULONG gflags;
-
- VOID SetBDefines()
- {
- bleft=abor->LeftEdge;
- btop=abor->TopEdge;
- bwidth=abor->Width;
- bheight=abor->Height;
- bfront=abor->FrontPen;
- bback=abor->BackPen;
- bdraw=abor->DrawMode;
- bcount=abor->Count*2;
- for(i=0; i<20; i++)
- helpV[i]=abor->Vectors[i];
- OldVectors();
- }
- VOID BDef()
- {
- sprintf(LEFTBuff,"%d",bleft);
- sprintf(TOPBuff,"%d",btop);
- sprintf(WIDTHBuff,"%d",bwidth);
- sprintf(HEIGHTBuff,"%d",bheight);
- sprintf(FRONTBuff,"%d",bfront);
- sprintf(BACKBuff,"%d",bback);
- if(bdraw==4) bdraw--;
- BText[0].IText=TDMode[bdraw];
- BText[6].IText=GTexte[3];
- if(gborder==0) BText[6].IText=GTexte[2];
- sprintf(GTexte[0],"%0.2d",bnr);
- sprintf(GTexte[1],"%0.2d",bcount);
- for(i=0; i<20; i++)
- {
- if(i<bcount) sprintf(VBuffer[i],"%d",helpV[i]);
- else strcpy(VBuffer[i],"");
- }
- RefreshGadgets(&BAus,Gwin,NULL);
- }
- USHORT NewBorder()
- {
- if(!(abor=(struct MyBorder *)AllocMem(sizeof(struct MyBorder),
- MEMF_CLEAR|MEMF_PUBLIC))) return(1);
- if(BType==0)
- {
- if(agad->GadgetBorder==NULL)
- {
- firstGB=abor;
- agad->GadgetBorder=firstGB;
- }
- else lastGB->NextBorder=abor;
- abor->Parent=lastGB;
- lastGB=abor;
- }
- if(BType==1)
- {
- if(agad->SelectBorder==NULL)
- {
- firstSB=abor;
- agad->SelectBorder=firstSB;
- }
- else lastSB->NextBorder=abor;
- abor->Parent=lastSB;
- lastSB=abor;
- }
- if(BType==2)
- {
- if(areq->ReqBorder==NULL)
- {
- firstGB=abor;
- areq->ReqBorder=firstGB;
- }
- else lastGB->NextBorder=abor;
- abor->Parent=lastGB;
- lastGB=abor;
- }
- abor->LeftEdge=-1;
- abor->TopEdge=-1;
- abor->FrontPen=3;
- if(areq) abor->FrontPen=areq->BackFill ^ 2;
- abor->DrawMode=JAM1;
- abor->Count=5;
- for(i=0; i<20; i++)
- {
- abor->Vectors[i]=0;
- OldV[i]=0;
- }
- if(BType < 2)
- {
- abor->Width=agad->Width+1;
- abor->Height=agad->Height+1;
- if(agad->Flags & GRELWIDTH) abor->Width+=awin->Width;
- if(agad->Flags & GRELHEIGHT) abor->Height+=awin->Height;
- }
- else
- {
- abor->Width=awin->Width-1;
- abor->Height=awin->Height-1;
- abor->LeftEdge=0;
- abor->TopEdge=0;
- }
- abor->Vectors[2]=abor->Width;
- abor->Vectors[4]=abor->Width;
- abor->Vectors[5]=abor->Height;
- abor->Vectors[7]=abor->Height;
- Banz++;
- bnr=Banz;
- return(0);
- }
- VOID SetBorder(UBYTE m)
- {
- abor->LeftEdge=bleft;
- abor->TopEdge=btop;
- abor->FrontPen=bfront;
- abor->BackPen=bback;
- abor->Count=bcount/2;
- if(bdraw==3) bdraw++;
- abor->DrawMode=bdraw;
- if(m > 0 && BType < 2)
- {
- x=agad->Width;
- y=agad->Height;
- if(agad->Flags & GRELWIDTH) x+=awin->Width;
- if(agad->Flags & GRELHEIGHT) y+=awin->Height;
- x1=gwidth;
- y1=gheight;
- TestSize();
- }
- if(m > 0 && BType == 2)
- {
- x=awin->Width;
- y=awin->Height;
- x1=Wwidth;
- y1=Wheight;
- TestSize();
- }
- abor->Width=bwidth;
- abor->Height=bheight;
- if(BType < 2) agad->Border=gborder;
- RetteVectors();
- ok=1;
- status=0;
- SaveOk=1;
- }
- VOID TestSize()
- {
- if(x1 > x) bwidth+=(x1-x);
- if(x1 < x) bwidth-=(x-x1);
- if(y1 > y) bheight+=(y1-y);
- if(y1 < y) bheight-=(y-y1);
- SetVectors();
- RetteVectors();
- }
- VOID RetteVectors()
- {
- for(i=0; i<20; i++)
- abor->Vectors[i]=helpV[i];
- }
- VOID SetVectors()
- {
- for(i=0; i<20; i+=2)
- {
- if((helpV[i]+OldV[i])==abor->Width)
- helpV[i]=bwidth-OldV[i];
- if((helpV[i+1]+OldV[i+1])==abor->Height)
- helpV[i+1]=bheight-OldV[i+1];
- }
- abor->Width=bwidth;
- abor->Height=bheight;
- }
- VOID DelBorder()
- {
- if(BType < 2)
- {
- helpB=agad->GadgetBorder;
- DelBo();
- agad->GadgetBorder=NULL;
- helpB=agad->SelectBorder;
- DelBo();
- agad->SelectBorder=NULL;
- BType=0;
- agad->Border=0;
- firstSB=NULL;
- lastSB=NULL;
- }
- else
- {
- helpB=areq->ReqBorder;
- DelBo();
- areq->ReqBorder=NULL;
- }
- firstGB=NULL;
- lastGB=NULL;
- abor=NULL;
- }
- VOID DelBo()
- {
- while(helpB)
- {
- abor=helpB->NextBorder;
- FreeMem(helpB,sizeof(struct MyBorder));
- helpB=abor;
- }
- }
- VOID HolBorder()
- {
- bnr=0;
- Banz=0;
- if(BType==0)
- {
- firstGB=agad->GadgetBorder;
- abor=firstGB;
- lastGB=NULL;
- }
- if(BType==1)
- {
- firstSB=agad->SelectBorder;
- abor=firstSB;
- lastSB=NULL;
- }
- if(BType==2)
- {
- firstGB=areq->ReqBorder;
- abor=firstGB;
- lastGB=NULL;
- }
- while(abor)
- {
- if(BType==0 || BType==2) lastGB=abor;
- else lastSB=abor;
- bnr++;
- Banz++;
- abor=abor->NextBorder;
- }
- if(BType==0 || BType==2) abor=lastGB;
- else abor=lastSB;
- }
- USHORT NewBorDef()
- {
- USHORT OKB=1;
- status=0;
- ScreenToFront(WMsc);
- BWindow.Screen=WMsc;
- if(!(Gwin=(struct Window *)OpenWindow(&BWindow))) return(1);
- Irp=Gwin->RPort;
- WinBorder(Gwin);
- PrintIText(Irp,&BText[43],0,0);
- SetDrMd(Irp,COMPLEMENT);
- RectFill(Irp,480,100,539,119);
- HolBorder();
- if(abor==NULL)
- {
- if(BType==0) DelGImage();
- if(NewBorder()) return(1);
- status=1;
- }
- SetBDefines();
- if(BType < 2) gborder=agad->Border;
- else gborder=1;
- d=gborder;
- BDef();
- ok=0;
- do
- {
- Wait(1L << Gwin->UserPort->mp_SigBit);
- GetMessage(Gwin);
- switch(class)
- {
- case GADGETUP:
- switch(Id)
- {
- /* ENDE */
- case 0: OKB=0;
- if(bdraw==3) bdraw++;
- if(ok) OKB=3;
- if(status)
- {
- ClrBorder();
- OKB=3;
- }
- break;
- /* O K */
- case 1: if(abor) SetBorder(0);
- else Error(13,0,1);
- break;
- /* LeftEdge */
- case 2: bleft=LEFTInfo.LongInt;
- break;
- /* TopEdge */
- case 3: btop=TOPInfo.LongInt;
- break;
- /* FrontPen */
- case 4: bfront=FRONTInfo.LongInt;
- break;
- /* BackPen */
- case 5: bback=BACKInfo.LongInt;
- break;
- /* Width */
- case 13: j=WIDTHInfo.LongInt;
- for(i=0; i<20; i+=2)
- if((helpV[i]+OldV[i])==bwidth)
- helpV[i]=j-OldV[i];
- bwidth=j;
- BDef();
- break;
- /* Height */
- case 14: j=HEIGHTInfo.LongInt;
- for(i=0; i<20; i+=2)
- if((helpV[i+1]+OldV[i+1])==bheight)
- helpV[i+1]=j-OldV[i+1];
- bheight=j;
- BDef();
- break;
- /* Neues Border */
- case 7: if(abor) SetBorder(0);
- if(Banz<99) {
- if(NewBorder())
- {
- Error(0,0,1);
- break;
- }
- SetBDefines();
- if(abor->Parent)
- {
- bleft=abor->Parent->LeftEdge;
- btop=abor->Parent->TopEdge;
- bfront=abor->Parent->FrontPen;
- bback=abor->Parent->BackPen;
- bdraw=abor->Parent->DrawMode;
- bwidth=abor->Parent->Width;
- bheight=abor->Parent->Height;
- bcount=abor->Parent->Count*2;
- if(bdraw==4) bdraw--;
- for(i=0; i<20; i++)
- helpV[i]=abor->Parent->Vectors[i];
- OldVectors();
- }
- if(gborder==0) gborder++;
- status=1;
- BDef(); }
- break;
- /* Border Plus */
- case 8: if(abor->NextBorder)
- {
- SetBorder(0);
- bnr++;
- abor=abor->NextBorder;
- SetBDefines();
- BDef();
- }
- break;
- /* Border Minus */
- case 9: if(abor->Parent)
- {
- SetBorder(0);
- bnr--;
- abor=abor->Parent;
- SetBDefines();
- BDef();
- }
- break;
- /* Count Plus */
- case 18: if(bcount < 20)
- {
- bcount+=2;
- sprintf(GTexte[1],"%0.2d",bcount);
- BDef();
- RefreshGadgets(&BVNr,Gwin,NULL);
- }
- break;
- /* Count Minus */
- case 17: if(bcount > 2)
- {
- bcount-=2;
- sprintf(GTexte[1],"%0.2d",bcount);
- BDef();
- RefreshGadgets(&BVNr,Gwin,NULL);
- }
- break;
- /* Border LĂ–SCHEN */
- case 11:
- if(abor)
- {
- ClrBorder();
- if(abor) SetBDefines();
- BDef();
- ok=1;
- }
- else Error(13,0,0);
- break;
- default:
- if(Id > 19 && Id < 40)
- {
- Id-=20;
- helpV[Id]=VInfo[Id].LongInt;
- if(Id & 1)
- OldV[Id]=bheight-helpV[Id];
- else OldV[Id]=bwidth-helpV[Id];
- }
- break;
- } /* switch Id */
- break;
- case GADGETDOWN:
- switch(Id)
- {
- /* DrawMode */
- case 6: if(++bdraw == 4) bdraw=0;
- BText[0].IText=TDMode[bdraw];
- RefreshGList(&BDraw,Gwin,NULL,1);
- break;
- /* Border EIN/AUS */
- case 12: if(firstGB==NULL)
- {
- Error(13,0,0);
- break;
- }
- if(gborder==0)
- {
- gborder=d;
- if(d==0) gborder++;
- BText[6].IText=GTexte[3];
- }
- else
- {
- gborder=0;
- BText[6].IText=GTexte[2];
- }
- RefreshGList(&BAus,Gwin,NULL,1);
- break;
- /* GadgetRender */
- case 15: if(BType==1)
- {
- if(firstSB) SetBorder(0);
- BType=0;
- if(BoWechsel()) OKB=2;
- }
- break;
- /* SelectRender */
- case 16: if(BType==0 && firstGB != NULL)
- {
- SetBorder(0);
- BType=1;
- if(BoWechsel()) OKB=2;
- }
- break;
- default: break;
- } /* switch Id */
- break;
- } /* switch class */
- } while(OKB==1); /* do */
- CloseWindow(Gwin);
- if(OKB==2) Error(0,0,1);
- Work();
- if(gborder==0) DelBorder();
- ScreenToFront(sc);
- if(OKB==3) SetNewWin(1);
- Ready();
- return(0);
- }
- VOID ClrBorder()
- {
- if(abor)
- {
- if(Error(12,0,0))
- {
- if(abor->Parent)
- {
- abor->Parent->NextBorder=abor->NextBorder;
- if(abor->NextBorder)
- {
- helpB=abor->NextBorder;
- abor->NextBorder->Parent=abor->Parent;
- }
- else
- {
- helpB=abor->Parent;
- if(BType==1) lastSB=helpB;
- else lastGB=helpB;
- bnr--;
- }
- }
- else
- {
- if(abor->NextBorder)
- {
- if(BType==0)
- {
- firstGB=abor->NextBorder;
- helpB=firstGB;
- agad->GadgetBorder=firstGB;
- }
- if(BType==1)
- {
- firstSB=abor->NextBorder;
- helpB=firstSB;
- agad->SelectBorder=firstSB;
- }
- if(BType==2)
- {
- firstGB=abor->NextBorder;
- helpB=firstGB;
- areq->ReqBorder=firstGB;
- }
- abor->NextBorder->Parent=NULL;
- }
- else
- {
- helpB=NULL;
- if(BType==0)
- {
- firstGB=NULL;
- lastGB=NULL;
- agad->GadgetBorder=NULL;
- }
- if(BType==1)
- {
- firstSB=NULL;
- lastSB=NULL;
- agad->SelectBorder=NULL;
- }
- if(BType==2)
- {
- firstGB=NULL;
- lastGB=NULL;
- areq->ReqBorder=NULL;
- }
- }
- }
- gborder=1;
- if(firstGB==NULL && firstSB==NULL)
- gborder=0;
- ClrWin();
- FreeMem(abor,sizeof(struct MyBorder));
- abor=helpB;
- Banz--;
- }
- }
- }
- USHORT BoWechsel()
- {
- SetPen(Irp,1,COMPLEMENT);
- RectFill(Irp,480,100,539,119);
- RectFill(Irp,480,128,539,147);
- HolBorder();
- i=1;
- if(abor==NULL)
- {
- if(NewBorder())
- {
- Error(0,0,1);
- return(1);
- }
- status=1;
- if(BType==1)
- {
- bleft=lastGB->LeftEdge;
- btop=lastGB->TopEdge;
- bfront=lastGB->FrontPen;
- bback=lastGB->BackPen;
- bdraw=lastGB->DrawMode;
- bwidth=lastGB->Width;
- bheight=lastGB->Height;
- bcount=lastGB->Count*2;
- if(bdraw==4) bdraw--;
- for(j=0; j<20; j++)
- helpV[i]=lastGB->Vectors[i];
- OldVectors();
- i=0;
- }
- }
- if(agad->Border==0) agad->Border++;
- if(i) SetBDefines();
- BDef();
- ok=1;
- return(0);
- }
-
- VOID OldVectors()
- {
- for(i=0; i<20; i+=2)
- {
- if(helpV[i] >= (bwidth >> 1))
- OldV[i]=bwidth-helpV[i];
- if(helpV[i+1] >= (bheight >> 1))
- OldV[i+1]=bheight-helpV[i+1];
- }
- }
-